import redis
from datetime import datetime, timedelta

class StockRedisClient:
    def __init__(self, host="127.0.0.1", port=6379, password=None, db=0):
        self.client = redis.Redis(
            host=host,
            port=port,
            password=password,
            db=db,
            decode_responses=True
        )

    def set_stock_time(self, stock_code: str, time_str: str, ttl: int = None) -> bool:
        """
        设置股票编号对应的时间，可选存活时间
        :param stock_code: 股票编号（键）
        :param time_str: 时间字符串（值）
        :param ttl: 存活时间（秒），默认为 None（永久）
        :return: 是否设置成功
        """
        try:
            if ttl:
                return self.client.setex(stock_code, ttl, time_str)
            else:
                return self.client.set(stock_code, time_str)
        except Exception as e:
            print(f"设置失败: {e}")
            return False

    def set_stock_now(self, stock_code: str, ttl: int = None) -> bool:
        """
        设置股票编号对应的时间为当前时间
        :param stock_code: 股票编号
        :param ttl: 存活时间（秒），默认为 None（永久）
        :return: 是否设置成功
        """
        now_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        return self.set_stock_time(stock_code, now_str, ttl)

    def get_stock_time(self, stock_code: str):
        """查询股票编号对应的时间"""
        return self.client.get(stock_code)

    def is_stock_time_valid(self, stock_code: str) -> bool:
        """
        检查股票编号对应的时间是否有效且在12小时内
        """
        time_str = self.get_stock_time(stock_code)
        if not time_str:
            return False

        try:
            stock_time = datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
        except ValueError:
            return False

        now = datetime.now()
        delta = now - stock_time
        return delta <= timedelta(hours=12)


